import asyncio,time

# 执行的是一个协程对象
async def func1():
	print('我是一个异步函数1')
	await asyncio.sleep(1)
	print('我是异步函数1结束')
	return '异步函数3结果'
async def func2():
	print('我是一个异步函数2')
	await asyncio.sleep(2)
	print('我是异步函数2结束')
	return '异步函数3结果'
async def func3():
	print('我是一个异步函数3')
	await asyncio.sleep(3)
	print('我是异步函数3结束')
	return '异步函数3结果'

async def main():
	start = time.time()
	# Create tasks from the coroutines
	task1 = asyncio.create_task(func1())
	task2 = asyncio.create_task(func2())
	task3 = asyncio.create_task(func3())
	
	# Wait for all tasks to complete
	# await asyncio.gather(task1, task2, task3)
	# Alternatively, you could use:
	done,pendding=await asyncio.wait([task1, task2, task3])
	lt = list(done)
	print('done',list(done))
	for i in lt:
		print(i.result())
	"""
	asyncio.wait 返回结果是无序的
	result = await asyncio.gather(task1, task2, task3,return_exceptions=false)
	
	return_exceptions=true:如果有错误信息返回错误信息，其他任务正常执行
	return_exceptions=false:如果有错误信息返回错误信息，所有任务正常停止
	"""
	
	print(time.time() - start)
if __name__ == '__main__':
	"""协程对象要执行必须借助 event_loop"""
	# event_loop=asyncio.get_event_loop()
	# event_loop.run_until_complete(task)
	"""若是直接使用 asyncio.run(func()) 可能会报：
	Event Loop has closed!!  因为run在finnally时候会执行 loop.close()
	"""
	"""3.8版本前写法
	start=time.time()
	f1=func1()
	f2=func2()
	f3=func3()
	tasks=[f1,f2,f3]
	asyncio.run(asyncio.wait(tasks))
	print(time.time()-start)
	"""
	asyncio.run(main())













